<?php

class TarefasController extends AppController {

    var $uses = array('Projeto', 'Cliente', 'Usuario', 'Tarefa', 'Hora');

    function index($projeto = null) {
        /*
         * Regras de facilitação
         *  @nome do usuario; (atribuir a tarefa a outro usuari, se voce tem
         * permissao
         *  #nome do projeto; (atribuir a tarefa a um projeto, podem existir
         * tarefas sem projeto, por exemplo Comprar Leite)
         *  %nome do cliente;  ( no caso de 2 projetos com o mesmo nome)
         * &data; (no formato brasileiro 13/06/1988, opicional)
         */
        if (isset($this->data)) {
//            $this->_stringanalise($this->data['Tarefa']['tarefa']);
//            die;
            $string_tarefa = $this->data['Tarefa']['tarefa'];
            unset($this->data['Tarefa']['tarefa']);

            $data = array();
            $usuario_nome = null;
            $projeto_nome = null;
            $cliente_nome = null;
            $tarefa_data = null;
            $cliente_id = null;
            $usuario_id = null;
            $projeto_id = null;

            if (preg_match("/%.+?;/", $string_tarefa, $cliente_nome)) {
                $cliente_nome = ereg_replace('[%;]', '', $cliente_nome[0]);
                $cliente_id = $this->Cliente->find('first', array(
                            'conditions' => array(
                                'UCASE(Cliente.nome)' => strtoupper($cliente_nome)
                            ),
                            'fields' => array('id'),
                            'recursive' => 0,
                        ));
                $data['Tarefa']['cliente_id'] = $cliente_id['Cliente']['id'];
            } else {
                unset($data['Tarefa']['cliente_id']);
            }

            if (preg_match("/@.+?;/", $string_tarefa, $usuario_nome)) {
                $usuario_nome = ereg_replace('[@;]', '', $usuario_nome[0]);
                $usuario_id = $this->Usuario->find('first', array(
                            'conditions' => array(
                                'UCASE(Usuario.nome)' => strtoupper($usuario_nome)
                            ),
                            'fields' => array('id'),
                            'recursive' => 0,
                        ));
                $data['Tarefa']['usuario_id'] = $usuario_id['Usuario']['id'];
            } else {
                $data['Tarefa']['usuario_id'] = $this->usuario['Usuario']['id'];
            }

            if (preg_match("/&.+?;/", $string_tarefa, $tarefa_data)) {
                $tarefa_data = ereg_replace('[@;]', '', $tarefa_data[0]);
            }

            if (preg_match("/#.+?;/", $string_tarefa, $projeto_nome)) {
                $projeto_nome = ereg_replace('[#;]', '', $projeto_nome[0]);
                if (isset($data['Tarefa']['cliente_id'])) {
                    $conditions = array(
                        'UCASE(Projeto.nome)' => strtoupper($projeto_nome),
                        'cliente_id' => $data['Tarefa']['cliente_id']
                    );
                } else {
                    $conditions = array('UCASE(Projeto.nome)' => strtoupper($projeto_nome));
                }
                $projeto_id = $this->Projeto->find('first',
                                array(
                                    'conditions' => $conditions
                                    ,
                                    'fields' => array('id'),
                                    'recursive' => 0,
                        ));

                $data['Tarefa']['projeto_id'] = $projeto_id['Projeto']['id'];
            } else {
                $projeto_id = $this->data['Tarefa']['projeto_id'];
                $data['Tarefa']['projeto_id'] = $this->data['Tarefa']['projeto_id'];
            }

            $data['Tarefa']['nome'] = eregi_replace("[%@#].+;", '', $string_tarefa);
            $data['Tarefa']['nome'] = eregi_replace(" +", ' ', $data['Tarefa']['nome']);
            if ($cliente_id != null && $projeto_id == null) {
                $this->Session->setFlash('Este Projeto não é desse cliente, ou esse projeto não existe', 'erro');
            } else {
                $this->Tarefa->save($data['Tarefa']);
            }
        }
        $conditions_tarefa = array('Tarefa.status' => 'ATI', 'usuario_id' => 1,);

        if ($projeto != null) {
            $conditions_tarefa['projeto_id'] = $projeto;
        }
        $this->set('tarefas', $this->Tarefa->find('all', array(
                    'conditions' => $conditions_tarefa,
                    'fields' => array('id', 'nome', 'deadline'),
                    'recursive' => 0
                )));

        $this->set('usuarios', $this->Usuario->find('list', array(
                    'fields' => array('id', 'nome')
                )));
        $this->set('clientes', $this->Usuario->find('list', array(
                    'fields' => array('id', 'nome')
                )));

        $this->Projeto->bindModel(array(
            'hasAndBelongsToMany' => array(
                'Usuario' => array('conditions' => array('Usuario.id' => $this->usuario['Usuario']['id']))
                )));

        $this->set('projetos', $this->Projeto->find('all',
                        array(
                            'conditions' => array(
                                'Projeto.status' => "ATI",
                            ),
                            'fields' => array(
                                'Projeto.id',
                                'Projeto.nome',
                                'Projeto.cor',
                            ),
                            'recursive' => 0
                        )
        ));
        $this->set('horaativa', $this->Session->read('horaAtiva'));
        $this->data['Tarefa']['projeto_id'] = $projeto;
    }

    function horas($tarefa_id) {
        $this->Session->write('horaAtiva', $this->Hora->controle($tarefa_id, $this->usuario['Usuario']['id']));

        $this->redirect('/tarefas/');
    }

    function completa($tarefa_id, $projeto_status = 'COM') {
        $data = array(
            'id' => $tarefa_id,
            'status' => $projeto_status
        );
        $tarefa_ativa = $this->Session->read('horaAtiva');
        $this->Tarefa->save($data);
        if ($tarefa_id == $tarefa_ativa) {
            $this->horas($tarefa_id);
        }
        $this->redirect('/tarefas/');
    }

    function _stringanalise($string) {

        if (preg_match("/^\/add/", $string)) {
            echo 'Sim é add';
            $modelo = null;
            preg_match("/[A-Z][a-z]+[ ]?/", $string, $modelo);
            $string = str_replace($modelo[0], '', $string);
            $dados = null;
            preg_match_all("/[ ][^;]+?[;]+?/", $string, $dados);
            $this->_tranformdata($dados[0]);
        }
    }

    function _addfunctions($model, $data = array()) {
        
    }

    function _tranformdata($data = null) {
        if (is_array($data) && count($data) > 0) {
            $retorno = array();
            foreach ($data as $line) {
                debug($line);
                $line_exp = explode(':', $line);
                $line_exp[1] = preg_replace('/[@;#$%&!]*/', '', $line_exp[1]);
                $retorno[trim($line_exp[0])] = trim($line_exp[1]);
            }
        }

        return $retorno;
    }

}

/*
 * TODOS GENERAIS
 *
 * @TODO Quando finalizar a ultima tarefa de um projeto perguntar para mudar o status
 * @TODO melhorar a inteligencia das REGEX
 * @TODO Adicionar ao SUPERCAMPO (add projeto, add cliente, add contato
 * @TODO relatórios
 * @TODO gerenciador de horas utilizadas
 * @TODO AUTH E ACL... ACL Talvez... pensar na necessidade
 * @TODO Começar a gerenciar meus projetos pelo FREELA FC
 * @TODO pensar no controle de caixa
 * @TODO envio de relatorios por e-mail
 * @TODO página pro cliente acompanhar o status (com ou sem senha?)
 * @TODO LOGOTIPO
 * @TODO página VIEW de todos os controllers !importante!
 * @TODO manual
 * @TODO Send FEEDBACK
 *
 *
 */
?>
